home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Netware Super Library
/
Netware Super Library.iso
/
inet_tcp
/
bootpd18
/
bootpd.txt
< prev
next >
Wrap
Text File
|
1993-04-22
|
17KB
|
520 lines
F R E E W A R E
B O O T P Server NLM for
Novell Netware 3.11 and above
Copyright 1993, by HellSoft
Comments and bugs to "meloun@vision.felk.cvut.cs"
New versions "nw311/bootpd:novell.felk.cvut.cs"
Written at Czech Technical University,
Prague, Czech Republic
E U R O P E
!!! WARNING !!!
The top-level domain "cs" will be soon changed to "cz", due to
splitting Czechoslovakia into Czech Republic and Slovakia. If "cs"
doesn't work, please try "cz" instead. The change is expected about
June 1993 and the "cs" domain should work in parallel at least till
the end of the year.
Introduction and Features
This NLM allows BOOTP protocol handling on Novell Netware 3.11 server.
It is written according to RFC951 and RFC1048 specification.
Features: - Supports multiple interfaces on server
- Static IP address assignments
- Dynamic IP address assigments
- Forward request capabilty
- Almost automated creation of the file with hosts definition
- Novell Netware 4.0 compatibility
- Build-in debuging mode
System requirements
BOOTPD NLM requires Novell Netware Server v3.11 or higher and RESOLV.NLM.
(RESOLV.NLM avaliable at "novell.felk.cvut.cs" in directory "nw311/resolv").
RESOLV.NLM does the name translation but if you have no name server you
must run RESOLV.NLM anyway, with no parameters.
What BOOTP server does?
Host machine identifies itself in the Internet environment using
BOOTP protocol. It receives IP address, subnet mask, default gateway
addresses, domain name server addresses, etc.
How BOOTP server works?
Incoming requests are divided into three categories that are processed
separately.
- request that contains MAC address and MAC type filled in "disable
list".
- request that came through gateway (forwarded request).
- request that came from the network connected directly to the
interface.
The "disable list" with global scope for the server is searched
first. If MAC address and MAC type of the request is found in the
"disable list" then request is not processed at all. The "disable
list" allows to have more than one server on one network (wire). The
"giaddr" item in request is checked next. It allowes to distinguish
between forwarded and non-forwarded requests.
Forwarded requests (i.e., request going through bootp gateway) are
maintained by the "forward list" with global validity for the server.
This list contains complete information that is returned to
requesting host.
How is the request coming from the directly connected network
processed?
If the request is received from the interface that was not properly
configured for bootp (command board, see below) then it is discarded.
Every configured interface stores two lists.
The first is the list of staticaly configured hosts and second is list of dynamicaly
configured hosts.
The "static list" is checked first. If MAC address and MAC type is found in
this list, the reply is generated and the process ended.
The "static list" was moved from global scope to board scope from this
version, this allows using static assignments on servers with more
interfaces with short addresses (Arcnet).
The "dynamic list" is checked next max. 3 times. Each item in the list
contains a flag which determines if this item has MAC address and
MAC type, and the time of last use.
First, the "dynamic list" is searched for an item
containing the same
MAC address and MAC type as the request. If it is found then the reply is generated and
the proccessing ended.
Second, the "dynamic list" is searched for non-used item. If it
is found, MAC address and MAC type is stored to it, the item is marked as used,
reply is generated and proccessing ended.
Third, the "dynamic list" is searched for the least recently used item. If
the
time interval of last using of this item is greater than TimeToLive,
the item is reused. New MAC address and MAC type is stored to the item, reply is
generated and proccessing ended.
Otherwise, error message is written to console.
Or, briefly:
- The "disable list" is applied as input filter.
- If
request is forwarded, the "forward list" is processed.
else
if packed is received from unconfigured interface then proccessing
ends
the "static list" assigned to received interface is checked.
the "dynamic list" is checked for the same MAC address and MAC type.
the "dynamic list" is checked for non-used intem.
the "dynamic list" is checked for least recently used item.
the error is reported.
Configuration:
Configuration is very simple.
The bootp response is generated according to a template. The template
is defined as a sequence of template commands. The sequence defines
the structure of the bootp response. There is one template per board
and the template can have as many executive commands for different
hosts as you like.
The configuration for every board looks like this:
- sequence of template commands
- executive command for given hosts
- optional (but almost always used) reset template
- sequence of template commands
- executive command for other hosts
- optional (but almost always used) reset template
.
.
.
Loading of the BOOTPD server:
load [path]BOOTPD use [file]
use [file]
Specifies configuration file name.
Default: sys:system/bootpd.cfg
load bootpd use sys:system/bootpd/config.cfg
BOOTPD Command line parameters:
BOOTPD show {[file]}
bootpd show
Show assigned dynamic IP addresses and state of BOOTP server.
bootpd show [file]
Save all dynamically assignments of IP addresses to file in
the format used for hosts file.
bootpd {error | warning | debug }
Set the output verbose level.
Configuration file
All empty lines and characters right to the '#' are ignored.
All IP addresses must be in numeric format.
Command
ForwardFile [file name]
Determines name of the forward description file. This file contains
configuration information for forwarded requests processing.
ForwardFile sys:system/bootpfwd.cfg
Command
DisableFile [file name]
Determines name of the disabled address file. Addresses in this
file work as the input filter for request packets.
DisableFile sys:system/disabled.cfg
Command
Board [IP Address]
This command sets properties of the particular interface and
enables processing of the BOOTP packet by this interface.
Subcommands of the Board command
Subcommand LiveTime [min]
Determine "TimeToLive" of dynamic assignment addresses. If it is zero, the
dynamic assignmets cannot be reused.
TimeToLive 60 # Time to live is one hour
Subcommand TimeOffset [offset]
Determines "time offset" returned to host. Optional.
!!! WARNING !!! Many bootp cilents cannot handle this
option. Please, verify if all of your bootp clients work properly
when time offset information is returned to host.
This is a template subcommand.
TimeOffset 60
or
TimeOffset ? # Time offset is set to same value as on
# file server
Subcommand Gateway [IP address]
Determines "default gateway" returned to host. Optional.
Maximum 4 gateways may be specified.
This is a template subcommand.
Gateway 147.32.14.4
or
Gateway ? # Default gateway is set to same address
# as that used in "Board" command.
Subcommand CookieServer [IP address]
Determines "CookieServer" returned to host. Optional.
Maximum 4 Cookie servers may be specified.
This is a template subcommand.
CookieServer 147.32.14.4
or
CookieServer ? # Cookie server is set to same address
# as that used in "Board" command.
Subcommand LPRServer [IP address]
Determines "LPRServer" returned to host. Optional.
Maximum 4 LPR servers may be specified.
This is a template subcommand.
LPRServer 147.32.14.4
or
LPRServer ? # LPR server is set to same address
# as that used in "Board" command.
Subcommand DNSServer [IP address]
Determines "DNSServer" returned to host. Optional.
Maximum 4 DNS servers may be specified.
This is a template subcommand.
DNSServer 147.32.14.4
or
DNSServer ? # DNS servers is set to same addreses
# as that used when resolv.nlm is loaded
Subcommand DynamicMask [IP address mask]
Subcommand DynamicName ["C" format string]
They determine the name for dynamically assigned hosts. The name
is created as follows: the IP address of the host is masked (ANDed)
with DynMask. The result is used as the argument for a C-like
sprintf function with a format string DynName.
If the output of sprintf is exactly "?", the host name
is resolved from the IP address by the name server.
The generation is enabled, when DynamicName is defined.
This is a template subcommand.
In "C" conventions:
sprintf(HostName, DynName, HostIPAddress & DynMask);
DynamicMask 0.0.0.255 # Only the last octet
DynamicName MyPC-%3.3d-Dyn # Generate Names "MyPC-001-Dyn"
# "MyPC-012-Dyn"
# "MyPC-128-Dyn"
DynamicMask 0.0.0.255 # Only the last octet
DynamicName MyPC-%d # Generate Names "MyPC-1"
# "MyPC-12"
# "MyPC-128"
DynamicName ? # Host name is resolved
# via resolv.nlm from name server
# The name is resolved only when this
# address is used for the first time.
Subcommand BootFileName ["C" format string]
It determines the name of boot file for dynamically assigned hosts.
The name is created using same rules as in Dynamic Name, with one
exception: the question mark is valid boot file name.
This is a template subcommand.
In "C" conventions:
sprintf(BootFile, BootFileName, HostIPAddress & DynMask);
DynamicMask 0.0.0.255 # Only the last octet
BootFileNAme Boot-%d # Generate Names
# "Boot-1"
# "Boot-12"
# "Boot-128"
Subcommand ResetTemplate
This subcommand resets the host template to the inital state -
only subnet mask is set to the same value as on the configured board.
This is a template subcommand
Subcommand DynamicHosts [range] [IP address]
This subcommand set dynamic assignment of IP addresses
for given interface. The assignment begins with [IP address]
address and generates [range] addresses. The dynamic
assigment is generated by previously defined template. All
next changes to the template have no effect to these assigments.
This is an executive subcommand.
Motivation: I don't like long numbers like Ethernet MAC
addresses. So first I enable the dynamic assignment
and after some time I save the created database by
Show [file] command. Then I only add the host names
and I have a hosts file for future use.
Acknowledgement: Thanks to Phil Karn and his KA9Q for inspiration.
DynamicHosts 126 147.32.15.128 # IP addresses from
# 147.32.15.128 to
# 147.32.15.254 will
# be assigned
# dynamically
Subcommand StaticHosts [Hosts file name for this interface]
This subcomand determines the file name used for static hosts
definition for this interface.
This is an executive subcommand.
StaticHosts sys:system/int1hst.cfg
Hosts File
Determines static assignments IP address <-> MAC address for
each board.
See sample file HOSTS.CFG.
Format:
[Host Name] [MAC type] [MAC address] [IP Address] {[Boot file name]}
Host Name - Host name, up to 40 characters. If host name is
"?" the BOOTPD resolves host name via resolv.nlm
from name server.
MAC type and address
- Ethernet
MAC address has 6 bytes, format "01:23:45:67:89"
Numbers in hex
- Pronet
MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
- IEEE802
All networks via standard IEEE 802 (Token-ring,...)
MAC address has 6 bytes, format "01:23:45:67:89"
Numbers in hex
- Arcnet
MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
IP address - IP address assigned to this host
Boot file name
- (optional) Name of boot file returned to host.
Disable file
Defines input filer for requests.
Format:
[MAC type] [MAC address]
MAC type and address
- Ethernet
MAC address has 6 bytes, format "01:23:45:67:89"
Numbers in hex
- Pronet
MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
- IEEE802
All networks via standard IEEE 802 (Token-ring,...)
MAC address has 6 bytes, format "01:23:45:67:89"
Numbers in hex
- Arcnet
MAC address has 1 byte, format "10" (decimal) or "0x10" (hex)
Forward file
This file contains configuration information for forwarded
requests processing. Template idea (same as in BOARD command) is used.
Subcommand TimeOffset [offset]
Determines "time offset" returned to host. Optional.
!!! WARNING !!! Many bootp cilents cannot handle this
option. Please, verify if all of your bootp clients work properly
when time offset information is returned to host.
This is a template subcommand.
TimeOffset 60
Subcommand Gateway [IP address]
Determines "default gateway" returned to host. Optional.
Maximum 4 gateways may be specified.
This is a template subcommand.
Gateway 147.32.14.4
# as that used in "Board" command.
Subcommand Subnet [IP mask]
Determines "subnet mask" returned to host. Optional.
Maximum 4 subnets may be specified.
This is a template subcommand.
Subnet 255.255.255.240
Subcommand CookieServer [IP address]
Determines "CookieServer" returned to host. Optional.
Maximum 4 Cookie servers may be specified.
This is a template subcommand.
CookieServer 147.32.14.4
Subcommand LPRServer [IP address]
Determines "LPRServer" returned to host. Optional.
Maximum 4 LPR servers may be specified.
This is a template subcommand.
LPRServer 147.32.14.4
Subcommand DNSServer [IP address]
Determines "DNSServer" returned to host. Optional.
Maximum 4 DNS servers may be specified.
This is a template subcommand.
DNSServer 147.32.14.4
Subcommand ResetTemplate
This subcommand resets the host template to the inital state -
all items are disabled.
This is a template subcommand
ResetTemplate
Subcommand Host [Name] [MAC type] [MAC addr] [IP Addr] {[Boot filename]}
This subcommand creates host record. The template, previously defined,
is saved to this record and it is used to generate reply in next time.
If the host name is "?", the name server is used for resolving the
name from IP address.
This is an executive subcommand.
Host ? Ethernet 00:12:34:56:78:9A 147.32.14.4 bootfile
P.S.: I'd appreciate any bug reports, but especially those from Pronet, IEEE802
and Arcnet users. This has been tested on Ethernet only.
P.P.S.:
If anybody finds this manual too short and unsatisfactory, I will be only
pleased if he will write a better one. My English is not good enough
and I'll appreciate any help.